package xjtu.sad.zbsj.dao.template;


import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import xjtu.sad.zbsj.template.*;

import java.util.List;

public interface TemplateDao {

    List<Template> getTemplateList(Integer userId);

    List<Attribute> getAttributeList(Integer templateId);

    List<AttributeValue> getAttributeValueList(Integer attrId);

    AttributeProperty getAttributeProperty(Integer attrId);

    Template getTemplateInfo(Integer templateId);

    UserInfo getUserInfo(Integer userId);

    @Select("select count(*) from t_task_template where template_id = #{templateId}")
    Integer getTemplateCount(Integer templateId);

    Integer addNewTemplate(Template template);

    void addNewAttribute(List<Attribute> attrs);

    void addNewAttributeValue(@Param("list") List<AttributeValue> attributeList);

    void addNewAttributeProperty(@Param("list") List<AttributeProperty> attributeList);

    void changeTemplateInfo(Template template);

    void changeAttributeInfo(List<Attribute> attributeList);

    void changeAttributePropertyInfo(List<AttributeProperty> attributePropertyList);

    void changeAttributeValueInfo(List<AttributeValue> attributeValueList);

    @Select("select count(*) from t_task where template_id = #{templateId}")
    Integer getTemplateUseCount(Integer templateId);

    void delAttributeProperty(List<AttributeProperty> attributePropertyList);

    void delAttributeValue(List<AttributeValue> attributeValueList);

    void delAttribute(List<Attribute> attributeList);

    void delTemplate(Integer templateId);

    @Select("select user_id from t_task_template where template_id = #{templateId}")
    Integer getCreateUserId(Integer templateId);

    @Select("select count(*) from t_task where template_id = #{templateId} and publisher != #{userId}")
    Integer getOtherUseCount(Integer templateId, Integer userId);

    @Update("update t_task_template set public_access = #{publicAccess} where template_id = #{templateId}")
    void changePublishStatus(Integer templateId, Boolean publicAccess);

    Integer getTotalNum(String pageKind, Integer userId);
}
